/**
 * Generali Solutions d'assurances - Tous droits rï¿½servï¿½s &copy; 2007 - 2010
 */
package fr.generali.accueilclient.referentiel.assembler;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import fr.generali.accueilclient.referentiel.ReferentielEnum;
import fr.generali.accueilclient.utils.tuple.Couple;
import fr.generali.refservcommuns.rce.referentiel.produits.list.produit.DTOProduit;

/**
 * @author ebrouillard
 */
@Component("listProduits2MapConverter")
public class ListProduits2MapConverter implements
    Converter<List<DTOProduit>, Couple<ReferentielEnum, Map<String, String>>> {

    /**
     * {@inheritDoc}
     */
    public Couple<ReferentielEnum, Map<String, String>> convert(List<DTOProduit> input) {
        Couple<ReferentielEnum, Map<String, String>> couple = null;

        couple = buildCouple(ReferentielEnum.LIBELLE_PRODUIT, input);

        return couple;
    }

    /**
     * Construit le couple (referentiel, liste de valeurs) quand on prend toutes
     * les valeurs renvoyes par le service
     * 
     * @param referentiel le referentiel
     * @param input un {@link DTOProduit} fourni par le service
     * @return le couple (referentiel, liste de valeurs)
     */
    private Couple<ReferentielEnum, Map<String, String>> buildCouple(ReferentielEnum referentiel, 
        List<DTOProduit> input) {
        Map<String, String> liste = buildListe(input);
        return new Couple<ReferentielEnum, Map<String, String>>(referentiel, liste);
    }

    /**
     * Construit la liste des references quand on les prend toutes
     * 
     * @param input un {@link DTOProduit} fourni par le service
     * @return la liste des references
     */
    private Map<String, String> buildListe(List<DTOProduit> input) {
        List<DTOProduit> produitsListe = input;
        Map<String, String> liste = new HashMap<String, String>(produitsListe.size());
        for (int i = 0; i < produitsListe.size(); i++) {
            DTOProduit produit = produitsListe.get(i);
            liste.put(produit.getCode(), produit.getNomCommercial());
        }
        return liste;
    }

}
